#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

//void reverse(int nums[], int left, int right)
//{
//	while (left < right)
//	{
//		int tmp = nums[left];
//		nums[left] = nums[right];
//		nums[right] = tmp;
//		left++;
//		right--;
//	}
//}
//
//void rotate(int* nums, int sz, int k)
//{
//	if (k >= sz)
//	{
//		k %= sz;
//	}
//
//	reverse(nums, 0, sz - k - 1);
//	reverse(nums, sz-k, sz - 1);
//	reverse(nums, 0, sz - 1);
//
//}
//
//int main()
//{
//	int nums[] = { 1,2,3,4,5,6,7 };
//	int sz = sizeof(nums) / sizeof(nums[0]);
//	int k = 3;
//	rotate(nums, sz, k);
//	for (int i = 0; i < sz; i++)
//	{
//		printf("%d ", nums[i]);
//	}
//	return 0;
//}

void rotate(int* nums, int sz, int k)
{
	if (k >= sz)
	{
		k = k % sz;
	}

	int* tmp = (int*)malloc(sizeof(int) * sz);
	memcpy(tmp, nums+sz-k, sizeof(int) * k);
	memcpy(tmp+k, nums, sizeof(int) * (sz-k-1));
	memcpy(nums, tmp, sizeof(int) * sz);
	free(tmp);
}

int main()
{
	int nums[] = { 1,2,3,4,5,6,7 };
	int sz = sizeof(nums) / sizeof(nums[0]);
	int k = 3;
	rotate(nums, sz, k);
	for (int i = 0; i < sz; i++)
	{
		printf("%d ", nums[i]);
	}
	return 0;
}